import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体，确保中文正常显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题


# 数据（模拟身高与体重的关系）
np.random.seed(42)  # 固定随机数，保证结果可复现
height = np.random.normal(170, 10, 200)  # 均值170，标准差10的正态分布
weight = 0.6 * height + np.random.normal(0, 5, 200)  # 体重与身高正相关，加随机噪声
age = np.random.randint(18, 60, 200)  # 年龄（用于控制点的大小/颜色）

# 创建画布和子图
fig, ax = plt.subplots(figsize=(9, 6))

# 绘制散点图（用年龄控制点的大小和颜色）
scatter = ax.scatter(
    height, weight,
    s=age*2,  # 点的大小（与年龄正相关）
    c=age,    # 点的颜色（与年龄正相关）
    cmap='viridis',  # 颜色映射方案
    alpha=0.7,       # 透明度
    edgecolors='black', linewidths=0.5  # 点的边框
)

# 添加颜色条（表示年龄）
cbar = plt.colorbar(scatter)
cbar.set_label('年龄')

# 美化
ax.set_title("身高与体重的关系（点大小和颜色表示年龄）", fontsize=14)
ax.set_xlabel("身高（cm）", fontsize=12)
ax.set_ylabel("体重（kg）", fontsize=12)
ax.grid(alpha=0.3)

plt.show()

fig.savefig("散点图.png", dpi=100)  # 保存图表（dpi控制清晰度）







